package com.d3works.apps.base.rest.common;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
 * JSON数据处理工具类
 *
 * @author wang
 */
public class JS {
  private static final Gson _Gson;

  private static final GsonBuilder _GBuilder;

  public static final String ROOT = "$";

  static {
    _GBuilder = new GsonBuilder();
    _GBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
    _GBuilder.serializeNulls();
    _GBuilder.disableHtmlEscaping();
    //        _GBuilder.setObjectToNumberStrategy(in -> {
    //            double dblValue = in.nextDouble();
    //            if (dblValue % 1 == 0) {
    //                if (dblValue > Integer.MAX_VALUE || dblValue < Integer.MIN_VALUE) {
    //                    return (long) dblValue;
    //                } else {
    //                    return (int) dblValue;
    //                }
    //            } else {
    //                return dblValue;
    //            }
    //        });
    //        _GBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
    //            @Override
    //            public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext
    // context)
    //                    throws JsonParseException {
    //                String s = json.getAsString();
    //                if (StringUtils.isEmpty(s)) {
    //                    return null;
    //                } else if (Pattern.matches("^\\d+$", s)) {
    //                    return new Date(json.getAsLong());
    //                } else {
    //                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //                    SimpleDateFormat sdfShort = new SimpleDateFormat("yyyy-MM-dd");
    //                    try {
    //                        return sdf.parse(s);
    //                    } catch (Exception e) {
    //                        try {
    //                            return sdfShort.parse(s);
    //                        } catch (Exception ex) {
    //                            throw new RuntimeException(ex.getMessage());
    //                        }
    //                    }
    //                }
    //            }
    //        });
    //        _GBuilder.registerTypeAdapter(Long.class, new JsonSerializer<Long>() {
    //            @Override
    //            public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext
    // context) {
    //                return new JsonPrimitive(src != null ? src.toString() : "0");
    //            }
    //        });
    _Gson = _GBuilder.create();
  }

  public static String toJson(Object obj) {
    return _Gson.toJson(obj);
  }
}
